package com.dingding.service.user.core.feedback.service.impl;

import java.util.Date;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.dingding.common.core.beans.Feedback;
import com.dingding.common.core.util.ToolUtil;
import com.dingding.common.core.util.paravalidate.ValiResult;
import com.dingding.common.core.util.paravalidate.ValidateUtil;
import com.dingding.facade.user.dto.feedback.ReqFeedbackDTO;
import com.dingding.service.user.core.feedback.dao.IFeedbackDao;
import com.dingding.service.user.core.feedback.service.IFeedbackService;

/**
 * 
 * @ClassName: FeedbackServiceImpl 
 * @Description: 意见反馈业务逻辑实现类
 * @author YHQ
 * @date 2016年11月22日 下午3:06:41
 * @since V2.5.6
 * 
 */
@Component("feedbackService")
public class FeedbackServiceImpl implements IFeedbackService{

	private Logger log = Logger.getLogger(this.getClass());
	
	@Resource(name = "feedbackDao")
	private IFeedbackDao feedbackDao;
	
	/**
	 * 
	 * @Title: userFeedback 
	 * @Description: 用户意见反馈
	 * @param reqFeedbackDTO 客户端请求参数
	 * @author YHQ 
	 * @since V2.5.6
	 * @return boolean    返回类型
	 * 
	 */
	@Override
	@Transactional(propagation=Propagation.REQUIRED)
	public boolean userFeedback(ReqFeedbackDTO reqFeedbackDTO) {
		
		// 判断客户端请求参数是否空
		if(!validateParam(reqFeedbackDTO)){
			return false;
		}
		
		// 获取并保存意见反馈信息
		Feedback feedback = this.getFeedback(reqFeedbackDTO);
		
		return feedbackDao.userFeedback(feedback);
	}

	/**
	 * 
	 * @Title: validateParam
	 * @Description: 验证客户端请求参数是否为空
	 * @param reqPublishOrderByTaxi
	 * @param @return    设定文件 
	 * @author YHQ 
	 * @since V2.5.6
	 * @return boolean    返回类型
	 * 
	 */
	public boolean validateParam(ReqFeedbackDTO reqFeedbackDTO){

		// 判断客户端请求数据是否为空
		ValiResult valiResult = ValidateUtil.validateBeanIsAvaliable(reqFeedbackDTO, ReqFeedbackDTO .class);

		if (!valiResult.isAvailable()) {
			log.error("为空字段为：" + valiResult.getNullFieldName());
			return false;
		}

		return true;
	}
	
	/**
	 * 
	 * @Title: getFeedback 
	 * @Description: 将客户端请求参数转为意见反馈对象
	 * @param reqFeedbackDTO 客户端请求参数
	 * @author YHQ 
	 * @since V2.5.6
	 * @return Feedback    返回类型
	 * 
	 */
	public Feedback getFeedback(ReqFeedbackDTO reqFeedbackDTO){
		
		Feedback feedback = new Feedback();
		
		feedback.setFbId(ToolUtil.getUid());	// 创建意见反馈主键Id
		feedback.setFbContent(reqFeedbackDTO.getFbContent()); // 意见反馈内容
		feedback.setFbSource(reqFeedbackDTO.getFbSource());	// 意见反馈来源
		feedback.setFbTime(new Date());	// 反馈时间
		feedback.setUserId(reqFeedbackDTO.getUserId()); // 反馈人Id
		
		return feedback;
	}
 	
}
